const {secret}=require('./token')
const jwt=require('jsonwebtoken')

// 白名单，登录，刷新token不受限制，不用token验证

const whiteList=['/login','/refresh','/getCode','/register'];

const isWhiteList=(url,whiteList)=>{
    return whiteList.find((item)=>item===url)?true:false
}


// 中间件，用来验证短token是否有效
const auth=async(req,res,next)=>{
    let url=req.url;   //获取请求路径 
    if(isWhiteList(url,whiteList)){
        // 执行下一步
        return await next()
    }else{
        // 获取请求头携带的短token
        const a_tk=req.headers.accesstoken;
        console.log(a_tk);
        
        if(!a_tk){
            // 判断短token是否存在，不存在返回401
            return res.send({
                code:401,
                msg:'accesstoken不存在'
            })
        }else{
            // 短token存在，解析token，判断短token是否有效
            await jwt.verify(a_tk,secret,async(err,data)=>{
                if(err){
                    // 无效则返回
                    return res.send({
                        code:401,
                        msg:'accesstoken无效'
                    })
                }else{
                    // 有效则执行下一步
                    return await next()
                }
            })
        }
    }
}
module.exports={
    auth
}